Шаг 3 - Добавление свойств к элементу.

IPolyCtl - интерфейс который содержит ваши методы и свойства. Самый простой способ добавить свойство к этому интерфейсу состоит в том, чтобы щелкнуть правой кнопкой мыши в ClassView и выбрать Add Property.

4_1.gif (2985 b)

Появится диалоговое окно Add Property to Interface которое позволит ввести информацию о добавляемых свойствах.
1. В раскрывающемся списке типов свойств выберите short.
2. Введите "Sides" как имя свойства (Property Name). Поскольку Вы редактируете поле имени свойства, поле Implementation показывает строки которые будут добавлены к вашему IDL файлу.
3. Нажмите OK, чтобы закончить добавлять свойство.

4_2.gif (5090 b)

MIDL (программа, которая компилирует .idl файлы) определит метод Get который возвращает свойство и метод Put который устанавливает свойство. Когда MIDL компилирует файл он автоматически определяет два метода в интерфейсе put_ и get_ от имени свойства.

Наряду с добавлением необходимых строк к .idl файлу, Add Property to Interface также добавляет прототипы функции Get и Put к описанию класса в PolyCtl.h и добавляет пустую реализацию к PolyCtl.cpp.

Чтобы устанавливать и получить свойство вам нужно место для его хранения. Из FileView откройте PolyCtl.h и добавьте следующую строку в конце описания класса после

m_clrFillColor is defined:
short m_nSides; 

Теперь Вы можете выполнять Get и Put методы. Get_Sides и put_Sides функции были добавлены в PolyCtl.h. Вы должны добавить код в PolyCtl.cpp, которой соответствует приведенному ниже:

STDMETHODIMP CPolyCtl::get_Sides(short *pVal)
{
   *pVal = m_nSides;
   return S_OK;
}

STDMETHODIMP CPolyCtl::put_Sides(short newVal)
{
   if (newVal > 2 && newVal < 101)
   {
      m_nSides = newVal;
      return S_OK;
   }
   else
      return Error(_T("Shape must have between 3 and 100 sides"));
}

Функция get_Sides просто возвращает текущее значение свойства Sides через pVal указатель. В put_Sides методе Вы проверяете что пользователь устанавливает свойство Sides к допустимому значению. Вы нуждаетесь в больше чем 2 сторонах что бы отображение было площадью и так как Вы будете сохранять массив точек для каждой стороны далее вам понадобиться ограничение по максимуму, 100 - приемлемое ограничение для максимального значения. Если недопустимое значение передано Вы используете ATL Error чтобы установить подробности ошибки в интерфейсе IErrorInfo. Это полезно если ваш контейнер нуждается в более подробной информации относительно ошибки чем информация возвращенная HRESULT.

Последняя вещь которую Вы должны сделать для свойства - инициализация m_nSides. Решим что треугольник является заданной по умолчанию формой. Добавим строку в конструктор PolyCtl.h:

CPolyCtl()
{
   m_nSides = 3;
}

Вы теперь Вы имеете полную реализацию свойства по имени Sides.

Hosted by uCoz